| @@ -0,0 +1,120 @@ | ||
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | + | |
| 3 | +from curtail_uuid import CurtailUUID | |
| 4 | +from django.contrib.auth.models import Group, User | |
| 5 | +from django.db import transaction | |
| 6 | +from django_response import response | |
| 7 | +from ipaddr import client_ip | |
| 8 | +from logit import logit | |
| 9 | +from rest_framework import viewsets | |
| 10 | +from TimeConvert import TimeConvert as tc | |
| 11 | + | |
| 12 | +from account.models import LensmanInfo, UserInfo | |
| 13 | +from account.serializers import GroupSerializer, LensmanInfoSerializer, UserInfoSerializer, UserSerializer | |
| 14 | +from operation.models import GuestEntranceControlInfo | |
| 15 | +from utils.error.errno_utils import UserStatusCode | |
| 16 | +from utils.redis.rguest import get_guest_entrance_control | |
| 17 | +from utils.redis.rprofile import set_profile_info | |
| 18 | +from utils.version_utils import is_version_match | |
| 19 | + | |
| 20 | + | |
| 21 | +@logit | |
| 22 | +@transaction.atomic | |
| 23 | +def user_wx_authorize_api(request): | |
| 24 | + # Get or Create User | |
| 25 | +    user, created = UserInfo.objects.select_for_update().get_or_create(unionid=request.POST.get('unionid', '')) | |
| 26 | + | |
| 27 | + # Set User_id | |
| 28 | + if created: | |
| 29 | + user.user_id = CurtailUUID.uuid(UserInfo, 'user_id') | |
| 30 | + | |
| 31 | + # Set User Key's Value | |
| 32 | + user.user_from = UserInfo.USER_USER | |
| 33 | +    user.openid = request.POST.get('wx_uid', '') | |
| 34 | +    user.sex = request.POST.get('sex', 0) | |
| 35 | +    user.nickname = request.POST.get('nickname', '') or request.POST.get('screen_name', '') | |
| 36 | +    user.avatar = request.POST.get('headimgurl', '') or request.POST.get('profile_image_url', '') | |
| 37 | +    user.country = request.POST.get('country', '') | |
| 38 | +    user.province = request.POST.get('province', '') | |
| 39 | +    user.city = request.POST.get('city', '') | |
| 40 | + user.user_status = UserInfo.ACTIVATED | |
| 41 | + user.signup_ip = client_ip(request) | |
| 42 | + user.signup_at = tc.utc_datetime() | |
| 43 | + user.save() | |
| 44 | + | |
| 45 | + set_profile_info(user) | |
| 46 | + | |
| 47 | + return response(200, 'User Login Success', u'用户端登录成功', user.data) | |
| 48 | + | |
| 49 | + | |
| 50 | +@logit | |
| 51 | +@transaction.atomic | |
| 52 | +def user_guest_login_api(request): | |
| 53 | + """ 游客登录 """ | |
| 54 | + gen = get_guest_entrance_control() | |
| 55 | + | |
| 56 | + # 是否配置游客入口控制信息 | |
| 57 | + if not gen: | |
| 58 | + return response(UserStatusCode.GUEST_NOT_ALLOWED) | |
| 59 | + | |
| 60 | + # 平台校验 | |
| 61 | +    platform = gen.get('platform', '') | |
| 62 | + if request.Android: | |
| 63 | + if platform not in [GuestEntranceControlInfo.ADR, GuestEntranceControlInfo.BOTH]: | |
| 64 | + return response(UserStatusCode.GUEST_NOT_ALLOWED) | |
| 65 | + else: | |
| 66 | + if platform not in [GuestEntranceControlInfo.IOS, GuestEntranceControlInfo.BOTH]: | |
| 67 | + return response(UserStatusCode.GUEST_NOT_ALLOWED) | |
| 68 | + | |
| 69 | + # 版本校验 | |
| 70 | + if not is_version_match(request, gen): | |
| 71 | + return response(UserStatusCode.GUEST_NOT_ALLOWED) | |
| 72 | + | |
| 73 | + # 通用唯一识别码 (Universally Unique Identifier) | |
| 74 | +    uuid = request.POST.get('uuid', '') | |
| 75 | + # 游客字段 | |
| 76 | +    fields = { | |
| 77 | + 'user_id': CurtailUUID.uuid(UserInfo, 'user_id'), | |
| 78 | + 'user_from': UserInfo.GUEST_USER, | |
| 79 | + 'uuid': uuid, | |
| 80 | + 'nickname': u'游客', | |
| 81 | + 'user_status': UserInfo.ACTIVATED, | |
| 82 | + } | |
| 83 | + # 若 uuid 存在,则 get_or_create,否则 create | |
| 84 | + if uuid: | |
| 85 | + user, created = UserInfo.objects.select_for_update().get_or_create(user_from=UserInfo.GUEST_USER, uuid=uuid, defaults=fields) | |
| 86 | + if created: | |
| 87 | +            user.nickname = u'游客{}'.format(user.pk) | |
| 88 | + user.save() | |
| 89 | + else: | |
| 90 | + user = UserInfo.objects.select_for_update().create(**fields) | |
| 91 | +        user.nickname = u'游客{}'.format(user.pk) | |
| 92 | + user.save() | |
| 93 | + | |
| 94 | + return response(200, 'Guest Login Success', u'游客登录成功', user.data) | |
| 95 | + | |
| 96 | + | |
| 97 | +class UserViewSet(viewsets.ModelViewSet): | |
| 98 | + """ | |
| 99 | + API endpoint that allows users to be viewed or edited. | |
| 100 | + """ | |
| 101 | +    queryset = User.objects.all().order_by('-pk') | |
| 102 | + serializer_class = UserSerializer | |
| 103 | + | |
| 104 | + | |
| 105 | +class GroupViewSet(viewsets.ModelViewSet): | |
| 106 | + """ | |
| 107 | + API endpoint that allows groups to be viewed or edited. | |
| 108 | + """ | |
| 109 | + queryset = Group.objects.all() | |
| 110 | + serializer_class = GroupSerializer | |
| 111 | + | |
| 112 | + | |
| 113 | +class LensmanInfoViewSet(viewsets.ModelViewSet): | |
| 114 | +    queryset = LensmanInfo.objects.all().order_by('-pk') | |
| 115 | + serializer_class = LensmanInfoSerializer | |
| 116 | + | |
| 117 | + | |
| 118 | +class UserInfoViewSet(viewsets.ModelViewSet): | |
| 119 | +    queryset = UserInfo.objects.all().order_by('-pk') | |
| 120 | + serializer_class = UserInfoSerializer | 
| @@ -1,120 +1,7 @@ | ||
| 1 | 1 | # -*- coding: utf-8 -*- | 
| 2 | +from __future__ import unicode_literals | |
| 2 | 3 |  | 
| 3 | -from curtail_uuid import CurtailUUID | |
| 4 | -from django.contrib.auth.models import Group, User | |
| 5 | -from django.db import transaction | |
| 6 | -from django_response import response | |
| 7 | -from ipaddr import client_ip | |
| 8 | -from logit import logit | |
| 9 | -from rest_framework import viewsets | |
| 10 | -from TimeConvert import TimeConvert as tc | |
| 4 | +from django.shortcuts import render | |
| 11 | 5 |  | 
| 12 | -from account.models import LensmanInfo, UserInfo | |
| 13 | -from account.serializers import GroupSerializer, LensmanInfoSerializer, UserInfoSerializer, UserSerializer | |
| 14 | -from operation.models import GuestEntranceControlInfo | |
| 15 | -from utils.error.errno_utils import UserStatusCode | |
| 16 | -from utils.redis.rguest import get_guest_entrance_control | |
| 17 | -from utils.redis.rprofile import set_profile_info | |
| 18 | -from utils.version_utils import is_version_match | |
| 19 | 6 |  | 
| 20 | - | |
| 21 | -@logit | |
| 22 | -@transaction.atomic | |
| 23 | -def user_wx_authorize_api(request): | |
| 24 | - # Get or Create User | |
| 25 | -    user, created = UserInfo.objects.select_for_update().get_or_create(unionid=request.POST.get('unionid', '')) | |
| 26 | - | |
| 27 | - # Set User_id | |
| 28 | - if created: | |
| 29 | - user.user_id = CurtailUUID.uuid(UserInfo, 'user_id') | |
| 30 | - | |
| 31 | - # Set User Key's Value | |
| 32 | - user.user_from = UserInfo.USER_USER | |
| 33 | -    user.openid = request.POST.get('wx_uid', '') | |
| 34 | -    user.sex = request.POST.get('sex', 0) | |
| 35 | -    user.nickname = request.POST.get('nickname', '') or request.POST.get('screen_name', '') | |
| 36 | -    user.avatar = request.POST.get('headimgurl', '') or request.POST.get('profile_image_url', '') | |
| 37 | -    user.country = request.POST.get('country', '') | |
| 38 | -    user.province = request.POST.get('province', '') | |
| 39 | -    user.city = request.POST.get('city', '') | |
| 40 | - user.user_status = UserInfo.ACTIVATED | |
| 41 | - user.signup_ip = client_ip(request) | |
| 42 | - user.signup_at = tc.utc_datetime() | |
| 43 | - user.save() | |
| 44 | - | |
| 45 | - set_profile_info(user) | |
| 46 | - | |
| 47 | - return response(200, 'User Login Success', u'用户端登录成功', user.data) | |
| 48 | - | |
| 49 | - | |
| 50 | -@logit | |
| 51 | -@transaction.atomic | |
| 52 | -def user_guest_login_api(request): | |
| 53 | - """ 游客登录 """ | |
| 54 | - gen = get_guest_entrance_control() | |
| 55 | - | |
| 56 | - # 是否配置游客入口控制信息 | |
| 57 | - if not gen: | |
| 58 | - return response(UserStatusCode.GUEST_NOT_ALLOWED) | |
| 59 | - | |
| 60 | - # 平台校验 | |
| 61 | -    platform = gen.get('platform', '') | |
| 62 | - if request.Android: | |
| 63 | - if platform not in [GuestEntranceControlInfo.ADR, GuestEntranceControlInfo.BOTH]: | |
| 64 | - return response(UserStatusCode.GUEST_NOT_ALLOWED) | |
| 65 | - else: | |
| 66 | - if platform not in [GuestEntranceControlInfo.IOS, GuestEntranceControlInfo.BOTH]: | |
| 67 | - return response(UserStatusCode.GUEST_NOT_ALLOWED) | |
| 68 | - | |
| 69 | - # 版本校验 | |
| 70 | - if not is_version_match(request, gen): | |
| 71 | - return response(UserStatusCode.GUEST_NOT_ALLOWED) | |
| 72 | - | |
| 73 | - # 通用唯一识别码 (Universally Unique Identifier) | |
| 74 | -    uuid = request.POST.get('uuid', '') | |
| 75 | - # 游客字段 | |
| 76 | -    fields = { | |
| 77 | - 'user_id': CurtailUUID.uuid(UserInfo, 'user_id'), | |
| 78 | - 'user_from': UserInfo.GUEST_USER, | |
| 79 | - 'uuid': uuid, | |
| 80 | - 'nickname': u'游客', | |
| 81 | - 'user_status': UserInfo.ACTIVATED, | |
| 82 | - } | |
| 83 | - # 若 uuid 存在,则 get_or_create,否则 create | |
| 84 | - if uuid: | |
| 85 | - user, created = UserInfo.objects.select_for_update().get_or_create(user_from=UserInfo.GUEST_USER, uuid=uuid, defaults=fields) | |
| 86 | - if created: | |
| 87 | -            user.nickname = u'游客{}'.format(user.pk) | |
| 88 | - user.save() | |
| 89 | - else: | |
| 90 | - user = UserInfo.objects.select_for_update().create(**fields) | |
| 91 | -        user.nickname = u'游客{}'.format(user.pk) | |
| 92 | - user.save() | |
| 93 | - | |
| 94 | - return response(200, 'Guest Login Success', u'游客登录成功', user.data) | |
| 95 | - | |
| 96 | - | |
| 97 | -class UserViewSet(viewsets.ModelViewSet): | |
| 98 | - """ | |
| 99 | - API endpoint that allows users to be viewed or edited. | |
| 100 | - """ | |
| 101 | -    queryset = User.objects.all().order_by('-pk') | |
| 102 | - serializer_class = UserSerializer | |
| 103 | - | |
| 104 | - | |
| 105 | -class GroupViewSet(viewsets.ModelViewSet): | |
| 106 | - """ | |
| 107 | - API endpoint that allows groups to be viewed or edited. | |
| 108 | - """ | |
| 109 | - queryset = Group.objects.all() | |
| 110 | - serializer_class = GroupSerializer | |
| 111 | - | |
| 112 | - | |
| 113 | -class LensmanInfoViewSet(viewsets.ModelViewSet): | |
| 114 | -    queryset = LensmanInfo.objects.all().order_by('-pk') | |
| 115 | - serializer_class = LensmanInfoSerializer | |
| 116 | - | |
| 117 | - | |
| 118 | -class UserInfoViewSet(viewsets.ModelViewSet): | |
| 119 | -    queryset = UserInfo.objects.all().order_by('-pk') | |
| 120 | - serializer_class = UserInfoSerializer | |
| 7 | +# Create your views here. | 
| @@ -2,8 +2,7 @@ | ||
| 2 | 2 |  | 
| 3 | 3 | from django.conf.urls import url | 
| 4 | 4 |  | 
| 5 | -from account import tourguide_views | |
| 6 | -from account import views as account_views | |
| 5 | +from account import account_views, tourguide_views | |
| 7 | 6 | from api import encrypt_views, mch_views | 
| 8 | 7 | from box import views as box_views | 
| 9 | 8 | from geo import views as geo_views | 
| @@ -21,7 +21,7 @@ from django.conf.urls.static import static | ||
| 21 | 21 | from django.contrib import admin | 
| 22 | 22 | from rest_framework import routers | 
| 23 | 23 |  | 
| 24 | -from account import views as account_views | |
| 24 | +from account import account_views | |
| 25 | 25 | from group import group_views, grouppage_views | 
| 26 | 26 | from miniapp import views as mini_views | 
| 27 | 27 | from photo import views as photo_views |